// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

// WCS任务类型枚举
/// <summary>
/// 定义WCS下发的任务类型
/// </summary>
public enum WcsTaskTypeEnum
{
    /// <summary>
    /// 空车移动任务
    /// </summary>
    EmptyMove = 1,
    /// <summary>
    /// 载货移动任务
    /// </summary>
    LoadedMove = 2,
    /// <summary>
    /// 充电任务
    /// </summary>
    Charge = 3,
    /// <summary>
    /// 临时停车任务
    /// </summary>
    TemporaryStop = 4,
    /// <summary>
    /// 继续行驶任务
    /// </summary>
    ContinueDriving = 5
}



// 任务状态枚举
/// <summary>
/// 定义任务的执行状态
/// </summary>
public enum TaskStatusEnum
{
    /// <summary>
    /// 空闲状态
    /// </summary>
    Idle = 0,
    /// <summary>
    /// 任务执行中状态
    /// </summary>
    InProgress = 1
}




/// <summary>
/// WCS写入任务指令
/// </summary>
public class WcsRgvTaskInstructionTable
{
    #region CWS写入指令


    public string Getplcaddress(string propertyname)
    {

        if (PlcAddressMap.TryGetValue(propertyname, out string address))
        {
            return address;
        }
        return null;

    }
    // WCS任务号
    /// <summary>
    /// WCS下发的任务号
    /// </summary>
    public ushort WcsTaskNumber { get; set; }
    // WCS任务类型
    /// <summary>
    /// WCS下发的任务类型
    /// </summary>
    public WcsTaskTypeEnum WcsTaskType { get; set; }
    // 起始二维码码值
    /// <summary>
    /// RGV正常行驶起始二维码码值，即当前扫描到的码值（不可为0和65535）
    /// </summary>
    public ushort StartQrCodeValue { get; set; }
    // 中间二维码码值
    /// <summary>
    /// RGV行驶起点至目标二维码之间的任意码值，若起终点相邻可填0表示不写入（不可为65535）
    /// </summary>
    public ushort MiddleQrCodeValue { get; set; }
    // 目标二维码码值
    /// <summary>
    /// RGV此次行驶的目标二维码码值（不可为0和65535）
    /// </summary>
    public ushort TargetQrCodeValue { get; set; }
    // 任务状态
    /// <summary>
    /// 任务的执行状态
    /// </summary>
    public TaskStatusEnum TaskStatus { get; set; }
    // 起点到目标点的距离长度（低16位）
    /// <summary>
    /// RGV此次行驶起点到目标点的距离（低16位），单位为mm
    /// </summary>
    public short DistanceToTargetLow { get; set; }
    // 起点到目标点的距离长度（高16位）
    /// <summary>
    /// RGV此次行驶起点到目标点的距离（高16位），单位为mm
    /// </summary>
    public short DistanceToTargetHigh { get; set; }
    // 中间点到目标点的距离长度（低16位）
    /// <summary>
    /// 中间二维码到目标二维码的距离（低16位），如果没有中间二维码填0
    /// </summary>
    public short DistanceFromMiddleToTargetLow { get; set; }
    // 中间点到目标点的距离长度（高16位）
    /// <summary>
    /// 中间二维码到目标二维码的距离（高16位），如果没有中间二维码填0
    /// </summary>
    public short DistanceFromMiddleToTargetHigh { get; set; }
    // RGV运行方向
    /// <summary>
    /// RGV此次行驶方向
    /// </summary>
    public RgvRunningDirectionEnum RgvRunningDirection { get; set; }
    // 小车运行速度
    /// <summary>
    /// 小车正常运行时的速度
    /// </summary>
    public ushort CarRunningSpeed { get; set; }
    // 小车运行加速度
    /// <summary>
    /// 小车正常运行时的加速度
    /// </summary>
    public ushort CarAcceleration { get; set; }
    // 小车运行减速度
    /// <summary>
    /// 小车正常运行时的减速度
    /// </summary>
    public ushort CarDeceleration { get; set; }
    // 任务更新位
    /// <summary>
    /// 每次下发任务都必须将此位置写入1，RGV才会执行指令，RGV接受任务后置值为非1
    /// </summary>
    public ushort TaskUpdateBit { get; set; }

    #endregion
    /// <summary>
    /// WCS心跳信号 每扫描周期wcs自动更新一次累加1
    /// </summary>
    public ushort WcsHeartbeatSignal { get; set; }









    /// <summary>
    /// WCS写入RGV任务指令表
    /// </summary>
    public WcsRgvTaskInstructionTable()
    {
        // 初始化任务更新位为1
        TaskUpdateBit = 1;
        //心跳=0
        WcsHeartbeatSignal = 0;
    }

    private static readonly Dictionary<string, string> PlcAddressMap = new Dictionary<string, string>
    {
        { nameof(WcsTaskNumber), "Wm40" },
        { nameof(WcsTaskType), "Wm041" },
        { nameof(StartQrCodeValue), "Wm042" },
        { nameof(MiddleQrCodeValue), "Wm043" },
        { nameof(TargetQrCodeValue), "Wm044" },
        { nameof(TaskStatus), "Wm045" },
        { nameof(DistanceToTargetLow), "Wm046" },
        { nameof(DistanceToTargetHigh), "Wm047" },
        { nameof(DistanceFromMiddleToTargetLow), "Wm048" },
        { nameof(DistanceFromMiddleToTargetHigh), "Wm049" },
        { nameof(RgvRunningDirection), "Wm050" },
        { nameof(CarRunningSpeed), "Wm051" },
        { nameof(CarAcceleration), "Wm052" },
        { nameof(CarDeceleration), "Wm053" },
        { nameof(TaskUpdateBit), "Wm054" },
        { nameof(WcsHeartbeatSignal), "Wm056" },


    };

}




// RGV指令状态枚举
/// &lt;summary&gt;
/// 定义RGV的指令状态
/// &lt;/summary&gt;
public enum RgvCommandStatusEnum
{
    /// &lt;summary&gt;
    /// 空闲状态，未收到工作指令
    /// &lt;/summary&gt;
    Idle = 0,
    /// &lt;summary&gt;
    /// 忙状态，收到工作指令，处于工作中
    /// &lt;/summary&gt;
    Busy = 1
}


#region WCS指令反馈表

#endregion

// RGV错误编号枚举
/// &lt;summary&gt;
/// 定义RGV的错误编号
/// &lt;/summary&gt;
public enum RgvErrorNumberEnum
{
    /// <summary>
    /// 无错误
    /// </summary>
    无错误 = 0,

    /// <summary>
    /// 升降伺服错误
    /// </summary>
    升降伺服错误 = 1,

    /// <summary>
    /// 行走伺服错误
    /// </summary>
    行走伺服错误 = 2,

    /// <summary>
    /// 运行错误
    /// </summary>
    运行错误 = 3,

    /// <summary>
    /// 系统错误
    /// </summary>
    系统错误 = 4
}


